package edu.simis.server;


import java.util.ArrayList;
import java.util.List;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

import edu.simis.client.SimisService;
import edu.simis.shared.Curso;
import edu.simis.shared.CursoEstudiante;
import edu.simis.shared.CursoProfesor;
import edu.simis.shared.Estudiante;
import edu.simis.shared.Horario;
import edu.simis.shared.Materia;
import edu.simis.shared.Profesor;
import edu.simis.shared.Rol;
import edu.simis.util.HibernateUtil;

import org.hibernate.Session;

public class SimisServiceImpl extends RemoteServiceServlet implements SimisService {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@SuppressWarnings("unchecked")
	@Override
	public List<Curso> getCurso() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
		List<Curso> curso = new ArrayList<Curso>(session.createQuery(
	        "de Curso").list());
	    session.getTransaction().commit();
	    return curso;
	}

	@Override
	public int saveCurso(Curso curso) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
	    session.save(curso);
	    session.getTransaction().commit();
	    return curso.getCodigo();
	}

	@Override
	public List<Estudiante> getEstudiante() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
		@SuppressWarnings("unchecked")
		List<Estudiante> estudiante = new ArrayList<Estudiante>(session.createQuery(
	        "de Estudiante").list());
	    session.getTransaction().commit();
	    return estudiante;
	}

	@Override
	public int saveEstudiante(Estudiante estudiante) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
	    session.save(estudiante);
	    session.getTransaction().commit();
	    return estudiante.getCodigo();
	}

	@Override
	public List<CursoEstudiante> getCursoEstudiante() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
		@SuppressWarnings("unchecked")
		List<CursoEstudiante> curso_estudiante = new ArrayList<CursoEstudiante>(session.createQuery(
	        "de Curso Estudiante").list());
	    session.getTransaction().commit();
	    return curso_estudiante;
	}

	@Override
	public int saveCursoEstudiante(CursoEstudiante cursoestudiante) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
	    session.save(cursoestudiante);
	    session.getTransaction().commit();
	    return cursoestudiante.getId();
	}

	@Override
	public List<CursoProfesor> getCursoProfesor() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
		@SuppressWarnings("unchecked")
		List<CursoProfesor> curso_profesor = new ArrayList<CursoProfesor>(session.createQuery(
	        "de Curso Profesor").list());
	    session.getTransaction().commit();
	    return curso_profesor;
	}

	@Override
	public int saveCursoProfesor(CursoProfesor cursoprofesor) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
	    session.save(cursoprofesor);
	    session.getTransaction().commit();
	    return cursoprofesor.getId();
	}

	@Override
	public List<Horario> getHorario() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
		@SuppressWarnings("unchecked")
		List<Horario> horario = new ArrayList<Horario>(session.createQuery(
	        "de horario").list());
	    session.getTransaction().commit();
	    return horario;
	}

	@Override
	public int saveHorario(Horario horario) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
	    session.save(horario);
	    session.getTransaction().commit();
	    return horario.getId();
	}

	@Override
	public List<Materia> getMateria() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
		@SuppressWarnings("unchecked")
		List<Materia> materia = new ArrayList<Materia>(session.createQuery(
	        "de materia").list());
	    session.getTransaction().commit();
	    return materia;
	}

	@Override
	public int saveMateria(Materia materia) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
	    session.save(materia);
	    session.getTransaction().commit();
	    return materia.getCodigo();
	}

	@Override
	public List<Profesor> getProfesor() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
		@SuppressWarnings("unchecked")
		List<Profesor> profesor = new ArrayList<Profesor>(session.createQuery(
	        "de profesor").list());
	    session.getTransaction().commit();
	    return profesor;
	}

	@Override
	public int saveProfesor(Profesor profesor) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
	    session.save(profesor);
	    session.getTransaction().commit();
	    return profesor.getId();
	}

	@Override
	public List<Rol> getRol() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
		@SuppressWarnings("unchecked")
		List<Rol> rol = new ArrayList<Rol>(session.createQuery(
	        "de rol").list());
	    session.getTransaction().commit();
	    return rol;
	}

	@Override
	public int saveRol(Rol rol) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
	    session.beginTransaction();
	    session.save(rol);
	    session.getTransaction().commit();
	    return rol.getDi();
	}

}
